#include <stdio.h>

union Data {
    int i;
    float f;
    char str[4];
};

int main() {
    union Data data;
    // 查看联合体大小（等于最大成员的大小，此处为4字节）
    printf("union Data 大小: %zu 字节\n", sizeof(union Data)); // 输出 4

    // 给 int 成员赋值
    data.i = 0x12345678; 
    printf("i = 0x%x\n", data.i);       // 输出 0x12345678
    printf("f = %f\n", data.f);         // 输出 float 解析 0x12345678 的值（无意义，仅展示覆盖）
    printf("str = %c%c%c%c\n", data.str[0], data.str[1], data.str[2], data.str[3]); 
    // 输出：xvh␒（对应 0x78、0x56、0x34、0x12 的 ASCII 字符，受字节序影响）

    // 给 float 成员赋值，覆盖原有 int 成员
    data.f = 3.14f;
    printf("i = 0x%x\n", data.i);       // 输出 float 3.14 的二进制对应的 int 值（无意义）
    return 0;
}
